Register in Prozessoren sind Speicherbereiche für binäre Daten, auf die Prozessoren besonders schnell zugreifen können.
Sie befinden sich darum in der direkten Nähe der Rechenwerke (CPU, ...).
Es gibt unterschiedliche Register, die alle für andere Dinge zuständig sind. Es folgt eine Auflistung der für uns relevanten:
Register | Bits | Erklärung |
---|---|---|
MCUCR |
ISC00 ISC01 ISC10 ISC11 |
Mit diesen vier Bits kann für die beiden externen Interrupts eingestellt werden, auf was diese reagieren sollen. Genaueres siehe externe Interrupts weiter unten. |
GIFR |
INTF0 INTF1 |
Diese Bits werden gesetzt, wenn im MCUCR ein Interrupt registriert wird. |
GIMSK |
INT0 INT1 |
In diesem Register werden die externen Interrupts aktiviert. |
SREG |
I Z C … |
Das Statusregister hat acht verschiedene Bits, die jeweils unterschiedliche Funktionen erfüllen. Das I-Bit aktiviert Interrupts allgemein, wenn es gesetzt ist. Das Z-Bit wird gesetzt, wenn die letzte Operation eine 0 als Ergebnis hatte. Das C-Bit wird gesetzt, wenn die letzte Operation einen Rest verursacht hat. |
TIMSK0 |
OCIE0 TOIE0 |
Hiermit wird eingestellt, auf was der Timer 0 reagieren soll (output compare / overflow). |
TCCR0 |
CS00 - CS01 |
Hiermit wird der Vorteiler des Timer 0 angegeben und somit der Interrupt aktiviert. |
r0-15 |
Diese Register sind frei verwendbar, auch, wenn sie nicht durch ‘immediate’-Befehle veränderbar sind. | |
r16-31 |
Hier sind ‘immediate’-Befehle verwendbar. Diese können zudem als 16-Bit Register verwendet werden, indem immer Paare (also r16 und r17 , …) beschrieben werden. |
Es gibt bei dem Microcontroller, den wir verwenden, 4 Ports (A/B/C/D). Für jeden Port gibt es zwei Register, die relevant sind:
DDRA/B/C/D
| Data direction register. Es beschreibt, in diesem Fall für Port B , welche der Pins Daten ausgeben sollen und welche zur Eingabe dienen werden. (1 = Ausgabe, 0 = Eingabe)
|
PORTA/B/C/D |
Wenn mittels DDRB für die Pins Input eingestellt wurde, werden die Bits den Eingaben der Pins gesetzt und man kann im Programm diese Eingaben verwenden. Wenn ‘Ausgabe’ eingestellt ist, können diese Bits gesetzt werden, um an den Port-Pins auszugeben. |
Um also zu bestimmen, welche der 8 Pins Ein- oder Ausgabe sein sollen, muss zunächst eine Bitmaske (z.B. DDRA = 00110100
) auf das data direction register des jeweiligen Ports gesetzt werden.
Dann kann man mittels PORTA/B/C/D
die Pin-Werte auslesen oder setzen, je nachdem, was man in DDRA/B/C/D
festgelegt hat.
Einige dieser Pins werden vom Mikrocontroller bereits für andere Dinge verwendet, wie z.B. als Eingabe für die externen Interrupts. Darum können nicht alle Pins verwendet werden.
Welche genau das sind steht in der lokalen Formelsammlung.